#pragma once
#include <string>
#include <time.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <memory>
#include <unordered_map>
#include "Log.hpp"

class Session
{
public:
    Session(const std::string &username, const std::string &passward)
        : _username(username), _passward(passward)
    {
        _create_time = time(nullptr); // 获取时间戳就行了，后面实际需要，就转化就转换一下
    }
    std::string Username()
    {
        return _username;
    }

private:
    // 用户的信息
    std::string _username;
    std::string _passward;
    std::string _create_time;
    // 还可以定义其他的用户信息，例如浏览记录等等
};
using session_ptr = std::shared_ptr<Session>;
class SessionManager
{
public:
    SessionManager()
    {
        srand(time(nullptr));
    }
    ~SessionManager()
    {
    }
    std::string AddSession(session_ptr s)
    {
        uint32_t randomid = rand() + time(nullptr); // 随机数+时间戳，实际有形成sessionid的库，比如boost uuid库，或者其他第三方库等
        std::string sessionid = std::to_string(randomid);
        _sessions.insert(std::make_pair(sessionid, s));
        return sessionid;
    }

    session_ptr GetSession(std::string sessionid)
    {
        if (_sessions.find(sessionid) == _sessions.end())
            return nullptr;
        else
            return _sessions[sessionid];
    }

private:
    std::unordered_map<std::string, session_ptr> _sessions; // sessionid索引session对象
};
